# ---------------MAKEFILE GENERAL-------------------------------

# Extensión de los archivos a compilar (c para C, cpp o cc o cxx para C++).
extension = cpp

# Descomentar si se quiere ver como se invoca al compilador
#verbose = si


# CONFIGURACION "AVANZADA"
###########################

# Opciones para el compilador C/C++ en modo ansi.
CFLAGS = -Wall -Werror -pedantic -pedantic-errors

# Para que explote lo mas posible
CFLAGS += -O3 -DNDEBUG

# Para valgrind o debug
CFLAGS += -ggdb -DDEBUG -fno-inline

# Opciones del enlazador.
LDFLAGS =

# Estandar de C++ a usar
CXXSTD = c++0x

#Agrego GTK
#CFLAGS += $(shell pkg-config --cflags gtk+-3.0)
#LDFLAGS += $(shell pkg-config --libs gtk+-3.0)

#Agrego gtkmm
CFLAGS += $(shell pkg-config --cflags gtkmm-3.0)
LDFLAGS += $(shell pkg-config --libs gtkmm-3.0)

#Agrego hilos
LDFLAGS += -lpthread -pthread

#Agrego SDL
LDFLAGS += $(shell sdl-config --libs) -lSDL_ttf -lSDL_mixer -lSDL_image

#Agrego Json y criptografia.

LIBS := -ljson_linux-gcc-4.7_libmt -lcrypto

# Pongo flags de C++ y de gtkmm
CXXFLAGS += $(CFLAGS)
LDLIBS+= $(shell pkg-config gtkmm-3.0 --libs)


CXXFLAGS += -std=$(CXXSTD)
LD = $(CXX)

occ := $(CC)
ocxx := $(CXX)
orm := $(RM)
old := $(LD)
ifdef verbose
RM := $(RM) -v
else
CC =  @echo "  CC  $@"; $(occ)
CXX = @echo "  CXX $@"; $(ocxx)
RM =  @echo "  CLEAN"; $(orm)
LD =  @echo "  LD  $@"; $(old)
endif

# Si no especifica archivos, tomo todos.
fuentes_client ?= $(wildcard ../Cliente/*.$(extension))
fuentes_server ?= $(wildcard ../Server/*.$(extension) ../Game/*.$(extension))
fuentes_common ?= $(wildcard ../Common/*.$(extension))
fuentes_editor ?= $(wildcard ../Editor/*.$(extension))

# REGLAS
#########

.PHONY: all clean

all: client server editor

o_common_files = $(patsubst %.$(extension),%.o,$(fuentes_common))
o_client_files = $(patsubst %.$(extension),%.o,$(fuentes_client)) $(o_common_files)
o_server_files = $(patsubst %.$(extension),%.o,$(fuentes_server)) $(o_common_files)
o_editor_files = $(patsubst %.$(extension),%.o,$(fuentes_editor)) $(o_common_files)


%.deps: %.$(extension)
	@set -e; rm -f $@; \
		$(old) -MM -MG -MP $(CXXFLAGS) $(CFLAGS) $< -MF $@.$$$$; \
		sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
		rm -f $@.$$$$

-include $(o_files:.o=.deps)

client: $(o_client_files)
	@if [ -z "$(o_client_files)" ]; \
	then \
		echo "No hay archivos de entrada para el cliente (archivos client/*.$(extension))."; \
		false; \
	fi >&2
	$(LD) $(o_client_files) $(LOADLIBS) $(LDLIBS) $(LIBS) $(LDFLAGS) $(LIBS)  -o cliente
	
server: $(o_server_files)
	@if [ -z "$(o_server_files)" ]; \
	then \
		echo "No hay archivos de entrada para el servidor (archivos server/*.$(extension))."; \
		false; \
	fi >&2
	$(LD) $(LDFLAGS) $(o_server_files) $(LOADLIBES) $(LDLIBS) $(LIBS)  -o server $(LDADD)

editor: $(o_editor_files)
	@if [ -z "$(o_editor_files)" ]; \
	then \
		echo "No hay archivos de entrada para el editor (archivos Editor/*.$(extension))."; \
		false; \
	fi >&2
	$(LD) $(LDFLAGS) $(o_editor_files) $(LOADLIBES) $(LIBS) $(LDLIBS) -o editor
	
clean:
	rm -f  ../Cliente/*.o ../Editor/*.o ../Game/*.o ../Server/*.o ../Common/*.o

